
/**
 * @author Adam Blackwell & Ryan Cassidy 
 */
// to represent a bank account
interface IAccount{
	
	// produce an updated account after depositing the given amount
	abstract IAccount deposit(int amt);
	
	// produce an updated account after withdrawing the given amount
	abstract IAccount withdraw(int amt);

	// Checks if you can withdraw a certain amount.
	abstract boolean canWithdraw(int i);
	
	// Checks if two accounts are the same.
	abstract boolean same(IAccount act);
	
	// Checks if this account is a Checking account.
	public abstract boolean isChecking();
	
	// Checks if this account is a Credit account.
	public abstract boolean isCredit();
	
	// Checks if this account is a Savings account.
	public abstract boolean isSavings();
	
	// Turns the account into a Checking account.
	public abstract Checking toChecking();
	
	// Turns the account into a Credit account.
	public abstract Credit toCredit();
	
	// Turns the account into a Savings account.
	public abstract Savings toSavings();
	
	// Checks if this account is a PremiumChecking account
	public abstract boolean isPremiumChecking();
	
	// Turns the account into a PremiumChecking account.
	public abstract PremiumChecking toPremiumChecking();
}